package com.chinairi.mall.service;

import com.chinairi.mall.controller.viewobject.ApproveDbIdVO;
import com.chinairi.mall.controller.viewobject.GoodsInfoVO;
import com.chinairi.mall.model.GoodsInfo;
import com.baomidou.mybatisplus.extension.service.IService;
import com.chinairi.mall.service.modelobject.GoodsAllInfoByMatDbIdMO;
import com.chinairi.mall.service.modelobject.HomeGoodsMO;
import com.chinairi.mall.service.modelobject.ViewContractMatRelMO;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 供应商查看商品的一些基本信息和一些维护功能，比如上下架，起订量的设置
 * //供应商上架表
 * //供应 服务类
 * </p>
 *
 * @author Webgasd
 * @since 2020-09-12
 */
public interface IGoodsInfoService extends IService<GoodsInfo> {

    /**
     * 根据供应商主键获取合同列表
     *
     * @return list
     */
    List<ViewContractMatRelMO> getContractList(String flag);

    /**
     * 获取用户店铺id
     *
     * @param type
     * @param request
     * @return
     */
    String getCsDbid(String type, HttpServletRequest request);

    /**
     * 获取店铺下的列表
     *
     * @param goodsInfoVO
     * @param id
     * @return
     */
    List<GoodsInfo> getListByCsDbId(GoodsInfoVO goodsInfoVO, String id);

    /**
     * 添加一条商品信息
     *
     * @param goodsInfoVO
     */
    void add(GoodsInfoVO goodsInfoVO) throws IOException;

    /**
     * 更新商品信息
     *
     * @param goodsInfoVO
     */
    void updateGoods(GoodsInfoVO goodsInfoVO);

    /**
     * 删除商品
     *
     * @param goodsDbid
     */
    void deleteById(String goodsDbid);

    /**
     * 获取合同下的物料
     *
     * @param contDbid
     * @return
     */
    List<GoodsInfoVO> getByContDbid(String contDbid);

    /**
     * 根据dbid获取商品信息
     *
     * @param goodsDbid
     * @return
     */
    GoodsInfoVO getByDbid(String goodsDbid);

    /**
     * 根据物料的dbId获取商品和供应商所有的信息
     *
     * @param dbIdList 物料dbIdList
     * @return List
     */
    Map<String, List<GoodsAllInfoByMatDbIdMO>> selectAllInfoByMatDbId(List<String> dbIdList);

    /**
     * 批量提交商品审核
     *
     * @param approveDbIdVoList
     */
    void updateStatus(List<ApproveDbIdVO> approveDbIdVoList);

    /**
     * 获取首页商品列表
     * 搜索条件为：
     * goodsName  商品名称     全模糊搜索
     * matCode    物料类别编码  左起始搜索  主要是侧边栏进入后使用
     * csShopName 店铺名称     全模糊搜索
     *
     * @param homeGoodsMo
     * @return
     */
    List<HomeGoodsMO> getHomeGoods(HomeGoodsMO homeGoodsMo);

    /**
     * 获取商品列表
     *
     * @param homeGoodsMo
     * @return
     */
    List<HomeGoodsMO> getGoodsListByCsDbId(HomeGoodsMO homeGoodsMo);

    /**
     * 获取热销商品
     *
     * @return
     */
    List<HomeGoodsMO> getHotSaleGoods();

    /**
     * 导入excel商品数据
     *
     * @param file
     * @throws IOException
     */
    void uploadFile(MultipartFile file) throws IOException;

    /**
     * 获取商品信息上传模板
     *
     * @param response
     * @throws IOException
     */
    void getModel(HttpServletResponse response) throws IOException;
}
